//
//  RevanUserAccount.swift
//  weibo_swift
//
//  Created by 紫荆秋雪 on 17/1/4.
//  Copyright © 2017年 紫荆秋雪. All rights reserved.
//

import UIKit
import YYModel

/// 存储用户信息文件名
private let userAccountFileName = "useraccount.json"


// MARK: - 用户模型
//"access_token" = "2.00pBCjdG0D5myUd9451f9e63MHsqHD";
//"expires_in" = 157679999;
//"remind_in" = 157679999;
//uid = 6083806657;
class RevanUserAccount: NSObject {
    /// 1、访问令牌
    var access_token: String? //= "2.00pBCjdG0D5myUd9451f9e63MHsqHD"
    /// 2、用户代号
    var uid: String?
    /// 3、access_token的生命周期
    var expires_in: TimeInterval = 0 {
        didSet {
            expiresDate = Date(timeIntervalSinceNow: expires_in)
        }
    }
    /// 4、过期时间
    var expiresDate: Date?
    
    override var description: String {
        return yy_modelDescription()
    }
    /// 5、用户昵称
    var screen_name: String?
    /// 6、用户头像地址 180*180像素
    var avatar_large: String?
    
    
    
    
    /// 重写构造函数
    /// 目标：从沙盒中获取 用户信息，并且转化成 userAccount模型
    override init() {
        super.init()
        // 1、获取沙盒路径
        let docPath = userAccountFileName.docDir()
        // 2、获取 二进制 数据
        guard let data = NSData.init(contentsOfFile: docPath),
              let dict = try? JSONSerialization.jsonObject(with: data as Data, options: []) as? [String: AnyObject] else {
            print("从沙盒中获取用户信息失败")
            return
        }
        // 3、dict 字典转模型 ,给当前模型赋值
        // 决定显示什么界面
        yy_modelSet(with: dict ?? [:])
        
        print("从沙盒中获取的用户信息\(self)")
        
        // 4、判断token是否过期
        // 测试过期日期 - 开发中，每一个分支都需要测试
        // expiresDate = Date(timeIntervalSinceNow: -3600 * 24)
        // print(expiresDate ?? 0)
        if expiresDate?.compare(Date()) != .orderedDescending {
            print("账户过期")
            // 清空 token
            access_token = nil
            uid = nil
            
            // 删除沙盒中的账户文件
            _ = try? FileManager.default.removeItem(atPath: docPath)
        }
        print("账户可以正常使用")
    }
    
    /** 存储文件的方法
     1. 偏好设置(小) -Xcode8 beta 无效
     2. 沙盒- 归档/plist/'json'
     3. 数据库(FMDB/CoreData)
     4. 钥匙串访问(小/自动加密 - 需要使用框架 SSKeychain)
     */
    func saveUserAccount() {
        // 1、模型转字典
        var dict = (yy_modelToJSONObject() as? [String: AnyObject]) ?? [:]

        // 2、需要删除 expires_in 值
        dict.removeValue(forKey: "expires_in")
        // 3、字典序列化 data (字典 -> 二进制数据)
        guard let data = try? JSONSerialization.data(withJSONObject: dict, options: []) else {
            return
        }
        // 4、沙盒路径
        let docPath = userAccountFileName.docDir()
        // 5、存储字典
        (data as NSData).write(toFile: docPath, atomically: true)
        print("沙盒路径 - \(docPath)")
    }
}
















